package com.xbongbong.pro.enums;

import com.xbongbong.pro.statistic.enums.NormalTypeEnum;
import lombok.Getter;

import java.util.Objects;

/**
 * 此枚举就适用于副指标图的时间范围筛选出现两个，一个全局一个非全局，然后用来判断两个时间范围是不是同一个的时间范围
 *
 * @author 查晨泓
 * @version v1.0
 * @date 2022/11/16 20:09
 * @since v1.0
 */
@Getter
public enum TimeRangeOperationEnum {

    /**
     * 昨天
     */
    YESTERDAY(NormalTypeEnum.YESTERDAY, TimeTypeEnum.DAY_LAST),
    /**
     * 今天
     */
    TODAY(NormalTypeEnum.TODAY, TimeTypeEnum.DAY),
    /**
     * 上周
     */
    LAST_WEEK(NormalTypeEnum.LAST_WEEK, TimeTypeEnum.WEEK_LAST),
    /**
     * 本周
     */
    THIS_WEEK(NormalTypeEnum.THIS_WEEK, TimeTypeEnum.WEEK),
    /**
     * 上月
     */
    LAST_MONTH(NormalTypeEnum.LAST_MONTH, TimeTypeEnum.MONTH_LAST),
    /**
     * 本月
     */
    THIS_MONTH(NormalTypeEnum.THIS_MONTH, TimeTypeEnum.MONTH),
    /**
     * 本季度
     */
    THIS_QUARTER(NormalTypeEnum.THIS_QUARTER, TimeTypeEnum.SEASON),

    ;

    private final NormalTypeEnum normalType;
    private final TimeTypeEnum timeType;

    TimeRangeOperationEnum(NormalTypeEnum normalType, TimeTypeEnum timeType) {
        this.normalType = normalType;
        this.timeType = timeType;
    }

    /**
     * 判断全局和非全局都存在的时候，是不是同一个时间范围
     * true：是
     * false：不是
     *
     * @param normalTypeEnum 非全局时间范围枚举
     * @param timeTypeEnum   全局时间范围枚举
     * @return
     */
    public static boolean isSameTime(NormalTypeEnum normalTypeEnum, TimeTypeEnum timeTypeEnum) {
        for (TimeRangeOperationEnum cache : TimeRangeOperationEnum.values()) {
            if (Objects.equals(cache.getNormalType(), normalTypeEnum) && Objects.equals(cache.getTimeType(), timeTypeEnum)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 通过全局时间范围获取到非全局时间范围
     *
     * @param timeTypeEnum 全局时间范围
     * @return 非全局时间范围筛选枚举
     */
    public static NormalTypeEnum getNormalEnumByTimeType(TimeTypeEnum timeTypeEnum) {
        for (TimeRangeOperationEnum cache : TimeRangeOperationEnum.values()) {
            if (Objects.equals(cache.getTimeType(), timeTypeEnum)) {
                return cache.getNormalType();
            }
        }
        return null;
    }

}
